package com.jn.erp.security.manager.factory;

import com.jn.erp.common.constant.Constants;
import com.jn.erp.common.utils.ServletUtils;
import com.jn.erp.common.utils.StringUtils;
import com.jn.erp.common.utils.ip.IpUtils;
import com.jn.erp.common.utils.spring.SpringUtils;
import com.jn.erp.security.entity.SysOperLog;
import com.jn.erp.security.sysservice.SysOperLogService;
import eu.bitwalker.useragentutils.UserAgent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.TimerTask;


//
//import com.jn.common.constant.Constants;
//import com.jn.common.utils.LogUtils;
//import com.jn.common.utils.ServletUtils;
//import com.jn.common.utils.StringUtils;
//import com.jn.common.utils.ip.AddressUtils;
//import com.jn.common.utils.ip.IpUtils;
//import com.jn.common.utils.spring.SpringUtils;
//import com.jn.system.domain.SysLogininfor;
//import com.jn.system.domain.SysOperLog;
//import com.jn.system.service.ISysLogininforService;
//import com.jn.system.service.ISysOperLogService;
//import eu.bitwalker.useragentutils.UserAgent;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.util.TimerTask;
//
///**
// * 异步工厂（产生任务用）
// *
// * @author jn
// */
public class AsyncFactory {
    private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");

    private static  final  boolean write=true;
    /**
     * 记录登录信息
     *
     * @param username 用户名
     * @param status   状态
     * @param message  消息
     * @param args     列表
     * @return 任务task
     */
    public static TimerTask recordLogininfor(final String username, final String status, final String message,final String orgId,
                                             final Object... args) {
        final String ip = IpUtils.getIpAddr();
        return new TimerTask() {
            @Override
            public void run() {
                // 封装对象
                SysOperLog operLog= new SysOperLog();
                operLog.setOperName(username);
                operLog.setTitle("登录操作");
                operLog.setBusinessType(4);
                operLog.setOperIp(ip);
                operLog.setJsonResult(message);
                operLog.setOrgId(orgId);
                operLog.setOperTime(LocalDateTime.now());
                // 日志状态
                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
                    operLog.setStatus(Integer.valueOf(Constants.SUCCESS));
                } else if (Constants.LOGIN_FAIL.equals(status)) {
                    operLog.setStatus(Integer.valueOf(Constants.FAIL));
                }

                if(write){
                    // 插入数据
                SpringUtils.getBean(SysOperLogService.class).save(operLog);
                }

            }

        };
    }

    /**
     * 操作日志记录
     *
     * @param operLog 操作日志信息
     * @return 任务task
     */
    public static TimerTask recordOper(final SysOperLog operLog)
    {
        return new TimerTask()
        {
            @Override
            public void run()
            {
                if(write){
                    // 远程查询操作地点
                    operLog.setOperTime(LocalDateTime.now());
                    SpringUtils.getBean(SysOperLogService.class).save(operLog);
                }

            }
        };
    }
}
